package com.example.demo.common;

import org.springframework.util.DigestUtils;
import org.springframework.util.StringUtils;

import java.nio.charset.StandardCharsets;
import java.util.UUID;

/**
 * 密码工具类
 */
public class PasswordUtils {

    /**
     * 加盐加密
     *
     * @param password
     * @return
     */
    public static String encrypt(String password){

        //1.盐值
        String salt= UUID.randomUUID().toString().replace("-","");
        //2.将盐值+密码 进行 MD5 得到最终的的密码
        String finalPassword= DigestUtils.md5DigestAsHex((salt+password).getBytes(StandardCharsets.UTF_8));
        //3.盐值和最终的的密码进行返回
        return  salt+"$"+finalPassword;
    }

    /**
     * 加盐验证
     *
     * @param password   待验证密码
     * @param dbPassword 数据库中的密码=盐值+分隔符+最终密码
     * @return
     */
    public static boolean decrypt(String password, String dbPassword) {

        if(!StringUtils.hasLength(password) || !StringUtils.hasLength(dbPassword) || dbPassword.length()!=65)
        {
            return false;
        }
        //1.得到盐值
        String[] dbPasswordArray=dbPassword.split("\\$");
        if(dbPasswordArray.length!=2)
        {
            return false;
        }
        String salt=dbPasswordArray[0];
        String dbFinalPassword=dbPasswordArray[1];
        //2.加密
        String finalPassword= DigestUtils.md5DigestAsHex((salt+password).getBytes(StandardCharsets.UTF_8));
        //3.对比
        if(finalPassword.equals(dbFinalPassword))
        {
            return true;
        }
        return false;
    }


}
